package com.example.casserver.model;

import lombok.Data;

import java.time.LocalDateTime;
import java.util.UUID;

/**
 * CAS授权票据（Ticket Granting Ticket）模型
 * 用于在用户登录后生成服务票据（Service Ticket）
 * 
 * TGT是CAS单点登录的核心票据，代表用户的登录会话
 * 存储在CASTGC cookie中，用于实现跨应用的单点登录
 */
@Data
public class TicketGrantingTicket {
    /**
     * 票据ID
     * 格式为："TGT-" + UUID
     * 存储在客户端的CASTGC cookie中
     */
    private String id;

    /**
     * 用户名
     * 标识票据所属的用户
     */
    private String username;

    /**
     * 票据创建时间
     */
    private LocalDateTime createdAt;

    /**
     * 票据过期时间
     * 默认为创建时间后8小时
     */
    private LocalDateTime expiresAt;

    /**
     * 创建新的TGT
     * 
     * @param username 用户名
     */
    public TicketGrantingTicket(String username) {
        this.id = "TGT-" + UUID.randomUUID().toString();
        this.username = username;
        this.createdAt = LocalDateTime.now();
        this.expiresAt = this.createdAt.plusHours(8);  // 8小时有效期
    }

    /**
     * 检查票据是否已过期
     * 
     * @return 是否过期
     */
    public boolean isExpired() {
        return LocalDateTime.now().isAfter(expiresAt);
    }

    /**
     * 检查票据是否有效
     * 
     * @return 是否有效
     */
    public boolean isValid() {
        return !isExpired();
    }
} 